package com.iuie.ns.system.service.user;

import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import com.iuie.ns.frame.office.excel.OutputExcelUtil.SheetColumn;
import com.iuie.ns.frame.service.IBaseService;
import com.iuie.ns.frame.web.dataset.vo.Page;
import com.iuie.ns.system.vo.role.SysRoleVO;
import com.iuie.ns.system.vo.user.SysUserVO;


/**
 * 
 * @description 登录系统的接口
 * @author lj
 * @createTime 2016年8月21日 上午11:19:47
 */
public interface ISysUserService extends IBaseService<SysUserVO>{
	
	String SYS_USER_SHEET_TITLE = "用户信息表";
	String SYS_USER_BOOK_NAME = "用户信息表";
	
	List<SheetColumn> SYS_USER_HEADERS = Arrays.asList(
			new SheetColumn("userName","用户姓名",40),
			new SheetColumn("userId","用户账号",40),
			new SheetColumn("userPhone","手机号",40));
	
	/**
	 * 
	 * @description 导出用户列表
	 * @author lj
	 * @param out 输出流
	 * @date 2016年10月28日 下午2:53:57
	 * @param params
	 * @throws IOException 
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public void exportExcel(OutputStream out, SysUserVO user) throws RowsExceededException, WriteException, IOException;

	/**
	 * 保存单个用户信息
	 * @createTime 2017年1月2日 下午4:51:58
	 * @param user
	 * @param roleIds 
	 * @return
	 */
	public SysUserVO addOneUser(SysUserVO user);

    /**
     * 根据userID查找用户角色
     * @param userId
     * @return
     * @date 2017年6月11日 下午4:04:58
     */
    public List<String> findRoleCodesByUserId(String userId);

    /**
     * 根据用户id查询用户权限
     * @param userId
     * @return
     * @date 2017年6月11日 下午4:08:26
     */
    public List<String> findPermissionCodesByUserId(String userId);
	
    /**
     * 根据userId查询用户，需查询出用户所拥有的角色
     * @param id
     * @return
     * @date 2017年6月14日 下午2:15:10
     */
	public SysUserVO findByIdWithRoles(Serializable id);
	
	/**
	 * 用户登录
	 * @param userId
	 * @return
	 */
	public SysUserVO updateUserWithLogin(String userId);

	/**
	 * 查询完整版本的用户信息
	 * @param id
	 * @return
	 */
	SysUserVO findByIdWithWhole(String id);
	
	List<SysUserVO> findByPage(SysUserVO user, Page page);
	
	public void saveUserRole(String userId, String[] roleIds);

	/**
	 * 更改用户资料
	 * @param user
	 * @return
	 * @date 2017年8月5日 下午2:32:48
	 */
	void updateOneUser(SysUserVO user);

	/**
	 * 重置用户密码
	 * @param userId
	 * @return
	 * @date 2017年8月6日 上午11:46:22
	 */
	void resetUserPwd(String userId);

	/**
	 * 修改用户密码
	 * @param userId
	 * @param userPwd
	 * @date 2017年8月6日 下午2:10:56
	 */
	public void updateUserPwd(String userId, String userPwd);

	/**
	 * 切换用户角色
	 * @param user
	 * @param role
	 * @date 2017年8月6日 下午6:56:07
	 */
	public void updateCurrentRole(SysUserVO user, SysRoleVO role);
	
	/**
	 * 根据token查询用户，token不能重复
	 * @param token
	 * @return
	 */
	public SysUserVO findUserByToken(String token);

    
}
